﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

namespace VerdePimienta2._0
{
    public partial class ClienteNuevo : Form
    {
        string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\des_VP.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\Chema\\Mis documentos\\Visual Studio 2008\\Projects\\VerdePimienta2.0\\VerdePimienta2.0\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        
        string deuda = "0"; 
        int CodigoVenta = 0;

        public ClienteNuevo()
        {
           InitializeComponent();
        }

        public ClienteNuevo(int codigoVenta, string deuda)
        {
            this.CodigoVenta = codigoVenta;
            this.deuda = deuda;
            InitializeComponent();
        }
    
        private void btnGuardarCliente_Click(object sender, EventArgs e)
        {
            bool ClienteEncontrado = false; 
 
            if (string.IsNullOrEmpty(txtnombreCliente.Text))
            {
                MessageBox.Show("Debe rellenar el nombre del Cliente.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if(string.IsNullOrEmpty(txtTelefonoCliente.Text) && string.IsNullOrEmpty(txtMovilCliente.Text))
                {
                    MessageBox.Show("Debe rellenar al menos un teléfono de contacto del Cliente.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (string.IsNullOrEmpty(txtMovilCliente.Text) && !EsNum(txtTelefonoCliente.Text))
                    {
                        MessageBox.Show("El teléfono debe ser numérico.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(txtTelefonoCliente.Text) && !EsNum(txtMovilCliente.Text))
                        {
                            MessageBox.Show("El móvil debe ser numérico.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            System.Nullable<int> Resultado1 = 0;
                            System.Nullable<int> Resultado2 = 0;
                            
                            verdepimientadbDataSetTableAdapters.QueriesTableAdapter Adapter = new VerdePimienta2._0.verdepimientadbDataSetTableAdapters.QueriesTableAdapter();
                            if (txtTelefonoCliente.Text != "")
                            {
                                Adapter.ComprobarExisteClienteTelefono(txtTelefonoCliente.Text, ref Resultado1);                                
                            }
                            
                            if (txtMovilCliente.Text != "")
                            {
                                Adapter.ComprobarExisteClienteMovil(txtMovilCliente.Text, ref Resultado2);                                
                            }

                            if ((Resultado1.Equals(1)) || (Resultado2.Equals(1))) 
                            {
                                ClienteEncontrado = true;
                            }                            
                            if (ClienteEncontrado == false)
                            {
                                DialogResult dr = MessageBox.Show("Está seguro de añadir un nuevo cliente?",
                                              "Nuevo Cliente.",
                                              MessageBoxButtons.OKCancel,
                                              MessageBoxIcon.Question);
                                if (dr == DialogResult.OK)
                                {
                                    int nuevoIdCliente = generarCodigoCliente();
                                    guardarDatosCliente(nuevoIdCliente);
                                    asignarclienteaVenta(nuevoIdCliente);
                                    resetDatosCliente();
                                    this.Close();

                                }
                                else
                                {

                                }
                            }
                            else
                            {
                                MessageBox.Show("El cliente ya existe en la base de datos.", "Error Alta cliente.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                }
            }
        }

        public bool EsNum(string val)
        {
            Regex _isNumber = new Regex(@"[0123456789]");
            Match m = _isNumber.Match(val);
            return m.Success;
        }

        public void resetDatosCliente()
        {
            txtnombreCliente.Clear();
            txtApellidosCliente.Clear();
            txtTelefonoCliente.Clear();
            txtMovilCliente.Clear();
            txtDireccionCliente.Clear();
            txtPoblacionCliente.Clear();
            txtProvinciaCliente.Clear();
            txtCPCliente.Clear();
            txtEmailCliente.Clear();
            txtObservacionesCliente.Clear();

        }

        private void btnCancelarCliente_Click(object sender, EventArgs e)
        {
            resetDatosCliente();
            this.Close();
        }

        private void asignarclienteaVenta(int codigoCliente)
        {
            string strSQL = "UPDATE Ventas SET IdCliente = '" + codigoCliente.ToString() + "' WHERE ID = " + CodigoVenta;

            SqlConnection conAp = new SqlConnection(constring);
            conAp.Open();

            SqlCommand cmSQL = new SqlCommand(strSQL, conAp);

            try
            {
                cmSQL.ExecuteNonQuery();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en acceso a base de datos.(Modificacion Caja)." + exc.Message, "Apertura.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            conAp.Close();
        }

        private int generarCodigoCliente()
        {
            int codigo = 0;
            string consulta = "Select count(*) from Clientes";

            SqlConnection conexion = new SqlConnection(constring);
            conexion.Open();

            SqlCommand cmd = conexion.CreateCommand();
            cmd.CommandText = consulta;

            codigo = (int)cmd.ExecuteScalar();
            cmd.Dispose();

            conexion.Close();

            codigo = codigo + 1;

            return codigo;
        }

        private void guardarDatosCliente(int codigoCliente)
        {
            try
            {
                SqlConnection conexionClientes = new SqlConnection(constring);
                conexionClientes.Open();

                SqlDataAdapter dtaClientes = new SqlDataAdapter("Select * From Clientes", conexionClientes);

                DataSet dtsClientes = new DataSet("Clientes");

                dtaClientes.FillSchema(dtsClientes, SchemaType.Source, "Clientes");
                dtaClientes.Fill(dtsClientes, "Clientes");

                DataTable dttClientes;

                dttClientes = dtsClientes.Tables["Clientes"];
                DataRow dtrClientes = dttClientes.NewRow();

                //Guardar datos Cliente en la tabla
                dtrClientes["Id"] = codigoCliente;
                dtrClientes["Nombre"] = txtnombreCliente.Text;
                dtrClientes["Apellidos"] = txtApellidosCliente.Text;
                dtrClientes["Telefono"] = txtTelefonoCliente.Text;
                dtrClientes["Movil"] = txtMovilCliente.Text;
                dtrClientes["Direccion"] = txtDireccionCliente.Text;
                dtrClientes["Poblacion"] = txtPoblacionCliente.Text;
                dtrClientes["Provincia"] = txtProvinciaCliente.Text;
                dtrClientes["CP"] = txtCPCliente.Text;
                dtrClientes["Email"] = txtEmailCliente.Text;
                dtrClientes["FechaAdhesion"] = dateAdhesionCliente.Text;
                dtrClientes["Observaciones"] = txtObservacionesCliente.Text;
                if (deuda != "0")
                    dtrClientes["Deuda"] = deuda;
                else
                    dtrClientes["Deuda"] = 0;
                dtrClientes["Tipo"] = "Cliente";

                //Guardar la nueva línea en la tabla
                dttClientes.Rows.Add(dtrClientes);

                SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(dtaClientes);
                dtaClientes.Update(dtsClientes, "Clientes");

                conexionClientes.Close();

                MessageBox.Show("Cliente guardado con éxito");
                this.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error acceso a base de datos.", exc.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
           
        }

        private void ClienteNuevo_Load(object sender, EventArgs e)
        {
            if (CodigoVenta != 0 && deuda != "0")
            {
                btnCancelarCliente.Visible = false;
                btnGuardarCliente.Text = "Aceptar";
            }
        }
    }
}
